package demo

import (
	"fmt"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

var (
	DB          *gorm.DB
	MysqlLogger logger.Interface
)

func Init() {

	/*
	   dsn 数据库连接信息
	*/
	username := "root"
	password := "root"
	host := "127.0.0.1"
	port := "3306"
	Dbname := "gorm_study"
	dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", username, password, host+":"+port, Dbname)

	//日志配置
	MysqlLogger = logger.Default.LogMode(logger.Info)

	db, err := gorm.Open(mysql.New(mysql.Config{
		DSN:                       dsn,   // DSN data source name
		DefaultStringSize:         256,   // string 类型字段的默认长度
		DisableDatetimePrecision:  true,  // 禁用 datetime 精度，MySQL 5.6 之前的数据库不支持
		DontSupportRenameIndex:    true,  // 重命名索引时采用删除并新建的方式，MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
		DontSupportRenameColumn:   true,  // 用 `change` 重命名列，MySQL 8 之前的数据库和 MariaDB 不支持重命名列
		SkipInitializeWithVersion: false, // 根据当前 MySQL 版本自动配置
	}), &gorm.Config{
		// SkipDefaultTransaction: true, //开启跳过默认事务
		// NamingStrategy: schema.NamingStrategy{
		// 	TablePrefix:   "gorm_", //表名前缀
		// 	SingularTable: true,    //单数表明（就是表名后面带不带S）
		// 	NoLowerCase:   false,   //是否禁用小写
		// },
		//Logger: nil, //全局日志
		DisableForeignKeyConstraintWhenMigrating: true, //禁用外键约束,不用实体外键
	})
	if err != nil {
		panic(err)
	}

	//连接数据库
	DB = db
}

// func main() {
// 	Init()
// 	//局部日志
// 	// DB = DB.Session(&gorm.Session{
// 	// 	Logger: MysqlLogger,
// 	// })

// 	//debug 单条日志
// 	DB.Debug().AutoMigrate(&Student{})

// }
